package com.lipaluma.parser.builder;

import com.lipaluma.field.adaptor.Adaptor;
import com.lipaluma.field.merge.FieldMergedAlgorithm;
import com.lipaluma.field.validator.Validator;
import com.lipaluma.parser.AbstractDataParser;
import com.lipaluma.parser.DataParser;

public interface FromParserFieldMapperAfterRegisterBuilder<BUILDER extends AbstractDataParser.Builder<? extends DataParser<TARGET>, TARGET>, TARGET> extends FromParserAddNewFieldMapperBuilder<BUILDER, TARGET> {
	public FromParserFieldMapperAfterRegisterBuilder<BUILDER, TARGET> asId();
	public FromParserFieldMapperAfterRegisterBuilder<BUILDER, TARGET> mergeWith(FieldMergedAlgorithm algorithm, String... params);
	public FromParserFieldMapperAfterRegisterBuilder<BUILDER, TARGET> mergeWith(FieldMergedAlgorithm algorithm);

	public FromParserValidatorBuilder<BUILDER, TARGET> validate();
	public FromParserValidatorOnEachValueBuilder<BUILDER, TARGET> validateOnEachValue();
	public FromParserAdaptorBuilder<BUILDER, TARGET> adapt();
	public FromParserAdaptorOnEachValueBuilder<BUILDER, TARGET> adaptOnEachValue();
	
	public FromParserFieldMapperAfterRegisterBuilder<BUILDER, TARGET> validate(Validator... validators);
	public FromParserFieldMapperAfterRegisterBuilder<BUILDER, TARGET> validateOnEachValue(Validator... validators);
	public FromParserFieldMapperAfterRegisterBuilder<BUILDER, TARGET> adapt(Adaptor... adaptors);
	public FromParserFieldMapperAfterRegisterBuilder<BUILDER, TARGET> adaptOnEachValue(Adaptor... adaptors);

	BUILDER end();
}
